#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>

int main()
{
  //C
  printf("hello printf!\n");
  fprintf(stdout,"hello fprintf!\n");
  fputs("hello fputs\n",stdout);

  //System call
  const char* msg1 = "hello write!\n";
  write(1,msg1,strlen(msg1));

  //代码结束之前
  //1 如果我们没有进行 >
  //stdout默认使用行刷新，在进程fork之前，三条C函数已经数据打印输出到显示器上（外设），在FILE内部，不存在数据
  //2 如果我们使用 > 写入的文件不再是显示器，而是普通文件，采用的刷新策略是全缓冲，之前3条c函数，虽然带了\n,但是无法将缓冲区写满。所以数据没有刷新
  //执行fork的时候，stdout是父进程，创建子进程时候，紧接着就是进程退出，一定要刷新缓冲区（就是修改）
  //由于发生了写时拷贝！所以信息刷新两次
  //3 write为什么没有呢？上面的过程和write无关，write没有FILE，而用的fd，就没有C提供的缓冲区
  
  fflush(stdout);
  pid_t id = fork();
  
  return 0;
}
